AtCoder Beginner Contest 262 题解
全部标签在OIer.Space上阅读|在洛谷上阅读Part0题意简述原题给出拥有的金属数量与金属配方,求金属\(N\)最大能合成的数量。Part1题目分析首先,金属\(i\)能配出的最大数量只和它的原数量和它的配方中能合成的数量有关。所以我们应该能想到递归,可以使用一个bool类型的递归函数来返回合成是否可行:如果有金属\(i\),返回可行并减去一份金属\(i\);如果没有金属\(i\)且没有配方,则返回不可行如果没有金属\(i\)有配方就递归配方所需金属\(r\);有任一不可行,返回不可行;所有可行,返回可行。Part2代码根据上方分析,可以写出递归函数://vectorrecipe[100+20]
题目传送门一道典型的贪心算法题。题目内容不多说了,大致说一下代码的思路:给定的所有纪念品中可以先用sort排一下顺序,然后从价格最高和最低的开始向中间靠拢(可以看做是指针),这样保证每组的搭配都是最优的。看代码:1#include2usingnamespacestd;3intw,n,a[100010],b[100010],cnt;4intmain(){5cin>>w>>n;6for(inti=1;i){7cin>>a[i];8b[i]=a[i];9}//设置一个b数组后面用于判断此纪念品是否已被分组10sort(a+1,a+n+1);//排序11intk=n,m=1;//用k记录剩余未分组的纪
题目传送门一道典型的贪心算法题。题目内容不多说了,大致说一下代码的思路:给定的所有纪念品中可以先用sort排一下顺序,然后从价格最高和最低的开始向中间靠拢(可以看做是指针),这样保证每组的搭配都是最优的。看代码:1#include2usingnamespacestd;3intw,n,a[100010],b[100010],cnt;4intmain(){5cin>>w>>n;6for(inti=1;i){7cin>>a[i];8b[i]=a[i];9}//设置一个b数组后面用于判断此纪念品是否已被分组10sort(a+1,a+n+1);//排序11intk=n,m=1;//用k记录剩余未分组的纪
Luogu链接:上帝造题的七分钟2/花神游历各国${\scr\color{ForestGreen}{\text{Solution}}}$题目大意支持两种操作:区间开方(向下取整)区间求和分析发现线段树容易实现区间求和,考虑区间开方操作其实并没有什么思路我们发现了一个很显而易见神奇的事情,如果对一个正整数进行无限多的开方且下取整操作,最后这个数一定会变成$1$然后用计算器计算一下,发现$1$~$10^{12}$里的一个数,最多开方$6$次,就能变成$1$所以一共最多只用修改$6\timesn$次,发现这是可以承受的所以就很简单啦!维护区间最大值,如果区间内所有数都小于等于$1$,就跳过这段区间如
Luogu链接:上帝造题的七分钟2/花神游历各国${\scr\color{ForestGreen}{\text{Solution}}}$题目大意支持两种操作:区间开方(向下取整)区间求和分析发现线段树容易实现区间求和,考虑区间开方操作其实并没有什么思路我们发现了一个很显而易见神奇的事情,如果对一个正整数进行无限多的开方且下取整操作,最后这个数一定会变成$1$然后用计算器计算一下,发现$1$~$10^{12}$里的一个数,最多开方$6$次,就能变成$1$所以一共最多只用修改$6\timesn$次,发现这是可以承受的所以就很简单啦!维护区间最大值,如果区间内所有数都小于等于$1$,就跳过这段区间如
题目来源45.跳跃游戏II题目详情给定一个长度为n的0索引整数数组nums。初始位置为nums[0]。每个元素nums[i]表示从索引i向前跳转的最大长度。换句话说,如果你在nums[i]处,你可以跳转到任意nums[i+j]处:0i+j返回到达 nums[n-1]的最小跳跃次数。生成的测试用例可以到达nums[n-1]。示例1:输入:nums=[2,3,1,1,4]输出:2解释:跳到最后一个位置的最小跳跃数是2。 从下标为0跳到下标为1的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。示例2:输入:nums=[2,3,0,1,4]输出:2提示:10题目保证可以到达 nums[n-1]
题目来源45.跳跃游戏II题目详情给定一个长度为n的0索引整数数组nums。初始位置为nums[0]。每个元素nums[i]表示从索引i向前跳转的最大长度。换句话说,如果你在nums[i]处,你可以跳转到任意nums[i+j]处:0i+j返回到达 nums[n-1]的最小跳跃次数。生成的测试用例可以到达nums[n-1]。示例1:输入:nums=[2,3,1,1,4]输出:2解释:跳到最后一个位置的最小跳跃数是2。 从下标为0跳到下标为1的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。示例2:输入:nums=[2,3,0,1,4]输出:2提示:10题目保证可以到达 nums[n-1]
目录1.递枕头2.二叉树中的第K大层和3.分割数组使乘积互质4.获得分数的方法数1.递枕头classSolution{public:intpassThePillow(intn,inttime){intmor=time%(2*(n-1));if(mor>=n-1){returnn-(mor-(n-1));}else{returnmor+1;}}};总结:按题意模拟即可2.二叉树中的第K大层和classSolution{public:longlongcnt[100010];intmaxpos=0;voiddfs(TreeNode*root,intpos){if(root==NULL){return
目录1.递枕头2.二叉树中的第K大层和3.分割数组使乘积互质4.获得分数的方法数1.递枕头classSolution{public:intpassThePillow(intn,inttime){intmor=time%(2*(n-1));if(mor>=n-1){returnn-(mor-(n-1));}else{returnmor+1;}}};总结:按题意模拟即可2.二叉树中的第K大层和classSolution{public:longlongcnt[100010];intmaxpos=0;voiddfs(TreeNode*root,intpos){if(root==NULL){return
目录A-CAPSLOCKB-YellowandRedCardC-FourVariablesD-UnicyclicComponentsE-Transitivity(补)A-CAPSLOCK题意:将输入字母转成大写代码:#include#defineintlonglongusingnamespacestd;signedmain(){std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);//freopen(".in","r",stdin);//freopen(".out","w",stdout);stringtemp;ci